<?php

// Definizione costanti di errore
define("ERROR_DEFAULT","Inserire nel campo un valore valido");
define("ERROR_CAMPO_VUOTO","Dato $0 non valorizzato");
define("ERROR_EMAIL","Email $0 non valida");
define("ERROR_CODICE","Codice di controllo non corretto");
define("ERROR_SELECT","Selezionare un'opzione");
define("ERROR_NUMERO","Numero non valido");


class modulo implements ArrayAccess {

	var $pkid = "";
	var $ts_ins = "";
	var $cliente = "";
	var $data = "";
	var $riferimento = "";
	var $riferimento_email ="";
	var $appserver_virtual = "";
	var $appserver_virtual_type="";
	var $appserver_cpu = "";
	var $appserver_n_cpu = "1";
	var $appserver_os = "";
	var $appserver_64_bit = "";
	var $appserver_ram_free = "";
	var $appserver_raid = "";
	var $appserver_hd = "";
	var $appserver_gb_inst = "";
	var $appserver_cluster = "";
	var $appserver_marca = "";
	var $appserver_modello = "";
	var $appserver_app1 = "";
	var $appserver_app2 = "";
	var $appserver_app3 = "";
	var $appserver_app4 = "";
	var $appserver_app5 = "";
	
	var $dbserver_virtual = "";
	var $dbserver_virtual_type="";
	var $dbserver_appserver = "";
	var $dbserver_presente = "";
	var $dbserver_dbrms = "";
	var $dbserver_cpu = "";
	var $dbserver_n_cpu = "1";
	var $dbserver_os = "";
	var $dbserver_64_bit = "";
	var $dbserver_ram_free = "";
	var $dbserver_raid = "";
	var $dbserver_hd = "";
	var $dbserver_gb_inst = "";
	var $dbserver_cluster = "";
	var $dbserver_marca = "";
	var $dbserver_modello = "";
	var $dbserver_app1 = "";
	var $dbserver_app2 = "";
	var $dbserver_app3 = "";
	var $dbserver_app4 = "";
	var $dbserver_app5 = "";

	var $sedi_n_post_principale = "";
	var $sedi_remote = "";
	var $sedi_n_sedi = "";
	var $sedi_connettivita = "";
	var $sedi_n_post_remote = "";
	var $sedi_n_abitanti = "";

	var $backup_presente = "";
	var $backup_apposito = "";

	var $note = "";
	
	var $punteggio = "";
	var $valutazione = "";
	
	private $labels =  array(
		'pkid' => 'Progressivo:',
		'ts_ins' => 'ts_ins',
		'cliente' => 'Cliente:',
		'data' => 'Data:',
		'riferimento' => 'Persona di Riferimento:',
	    'riferimento_email' => 'Email Riferimento:',
		'appserver_virtual' => 'Server Virtuale',
		'appserver_virtual_type' => 'Tipo virtualizzazione:',
		'appserver_cpu' => 'CPU:',
	    'appserver_n_cpu' => 'N° CPU:',
		'appserver_os' => 'Sistema Operativo:',
		'appserver_ram_free' => 'Ram libera:',
		'appserver_raid' => 'Tipologia Array:',
		'appserver_hd' => 'Tipologia HD:',
		'appserver_gb_inst' => 'Quantità di GB liberi per Installazione e Repository Documentale',
		'appserver_marca' => 'Marca Server:',
		'appserver_cluster' => 'Installazione in Cluster (Fail-Over)',
		'appserver_modello' => 'Modello:',
		'appserver_64_bit' => '64 bit',
		'dbserver_virtual' => 'Server Virtuale:',
		'dbserver_virtual_type' => 'Tipo virtualizzazione:',
		'dbserver_cpu' => 'CPU:',
	    'dbserver_n_cpu' => 'N° CPU:',
		'dbserver_os' => 'Sistema Operativo:',
		'dbserver_ram_free' => 'Ram libera:',
		'dbserver_gb_inst' => 'Quantità di GB liberi per Installazione e Repository Documentale',
		'dbserver_raid' => 'Tipologia Array:',
		'dbserver_hd' => 'Tipologia HD:',
		'dbserver_marca' => 'Marca Server:',
		'dbserver_cluster' => 'Installazione in Cluster (Fail-Over)',
		'dbserver_modello' => 'Modello:',
		'dbserver_64_bit' => '64 bit',
		'dbserver_dbrms' => 'Tipologia DB:',
		'dbserver_appserver' => 'Server Application e Database coincidono',
		'dbserver_presente' => 'Database già presente',
	    'sedi_n_post_principale' => 'N° Postazioni sede Principale:',
		'sedi_remote' => 'Sedi Remote',
		'sedi_n_sedi' => 'N° Sedi Remote:',
		'sedi_connettivita' => 'Connettività MINIMA GARANTITA sedi remote:',
		'sedi_n_post_remote' => 'N° Postazioni per sede',
		'sedi_n_abitanti' => 'N°Abitanti Comune (stima)',
		'backup_presente' => 'Già presente e utilizzato',
		'backup_apposito' => 'Acquistato o da acquistare appositamente dimensionato per Database e Repository Sicraweb'
	);
	
	
	private $validate =  array(
		'cliente' => array('.{1,}',ERROR_CAMPO_VUOTO),
		'riferimento' => array('.{1,}',ERROR_CAMPO_VUOTO),
		'riferimento_email' => array('[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}',ERROR_EMAIL),
		'appserver_cpu' => array('.{1,}',ERROR_SELECT),
		'appserver_n_cpu' => array('[1-9]{1}\d{0,1}',ERROR_NUMERO),
		'appserver_os' => array('.{1,}',ERROR_SELECT),
		'dbserver_cpu' => array('.{1,}',ERROR_SELECT),
		'dbserver_n_cpu' => array('[1-9]{1}\d{0,1}',ERROR_NUMERO),
		'dbserver_os' => array('.{1,}',ERROR_SELECT),
		'sedi_n_post_principale' => array('[1-9]{1}\d{0,1}',ERROR_NUMERO)
	);

	//errors
	private $errors =  array();

	public function getErrors() {
		return $this->errors;
	}

	public function setErrors($errors) {
		$this->errors=$errors;
	}

	public function getLabels() {
		return $this->labels;
	}

	public function getLabel($key) {
		if(isset($this->labels[$key]))
			return htmlspecialchars($this->labels[$key],ENT_QUOTES);
		else {
			//error_log("Errore getLabel");
			return "";
		}
	}

	public function getValue($key) {
		// TODO
		$var = get_object_vars($this);
		return $var[$key];
	}

	public function isValid($key) {
		$res = 0;
		if (!isset($this->validate[$key][0])||$this->validate[$key][0]=='')
			return true;
		else if (isset($this->$key) &&  $this->$key!='') {
			$pattern = "/^".$this->validate[$key][0]."$/";
			$res = preg_match($pattern, $this->$key);
		}else
			return false;
		return ($res>0)?true:false;
	}
	
	public function getErrorDescription($key) {	
		if(array_key_exists($key,$this->validate)){	
			$msg = $this->validate[$key][1];	
			if (!isset($msg))
				return ERROR_DEFAULT;
			$msg= str_replace('$0', $key, $msg);
			return htmlspecialchars($msg,ENT_QUOTES);
		}
		return "";
	}

	public function offsetExists($offset) {
		return isset($this->$offset);
	}

	public function offsetGet($offset) {
		return $this->$offset;
	}

	public function offsetSet($offset , $value) {
		$this->$offset = $value;
	}

	public function offsetUnset($offset) {
		unset($this->$offset);
	}

}

?>